<!--
document.onselectstart = new Function("return false");
b  = new Object();
xm = 0;
ym = 0;
dx = 0;
dy = 0;
dt = 0;
M  = false;
zz = 10;
Nw = 19;
link = function(B,o){//根据o球移动B球
	if(M!=B){//非事件源
		dx = (o.X+o.WB)-(B.X+B.WB);//后一个小球与前一个小球圆心的X坐标差
		dy = (o.Y+o.WB)-(B.Y+B.WB);
		dt = (B.WB+o.WB)-Math.sqrt(dx*dx+dy*dy);//两小球相对变化的距离：半径和-圆心距（(dx*dx+dy*dy)的平方根）
		ang = Math.atan2(dy,dx);//返回正切值为dy/dx的角度。
		B.X -= dt*Math.cos(ang);
		B.Y -= dt*Math.sin(ang);
	}
}

repuls = function(B,i){
	for(j=i;j<Nw;j++){//从B后第2个小球开始遍历（第一个小球不会重合）
		o = b[j];
		dx = (o.X+o.WB)-(B.X+B.WB);
		dy = (o.Y+o.WB)-(B.Y+B.WB);
		dt = (B.WB+o.WB)-Math.sqrt(dx*dx+dy*dy);
		//document.getElementById("textX").value=dt;
		if(dt>1){
			ang = Math.atan2(dy,dx);//返回正切值为dy/dx的角度。
			dx = dt*Math.cos(ang);
			dy = dt*Math.sin(ang);
			B.X -= dx;
			B.Y -= dy;
			o.X += dx;
			o.Y += dy;
		}
	}
}

document.onmousemove = function(e){
	if (!e) e = window.event;
	xm = (e.x || e.clientX);//鼠标指针相对于浏览器页面（或客户区）的水平坐标。
	ym = (e.y || e.clientY);
	if(M!=false){//鼠标移动时点选的是小球
		M.X=xm+xZ;//小球的当前X坐标：鼠标位置+相对位置
		M.Y=ym+yZ;
		for(i=Nw-2;i>=0;i--)link(b[i],b[i+1]);//从后往前调整小球
		for(i=1;i<Nw;i++)link(b[i],b[i-1]);//从前往后调整小球
		for(i=0;i<Nw-1;i++)repuls(b[i],i+2);//调整小球位置，禁止覆盖
	}
	return false;
}

document.onmousedown = function(e){
	if (!e) e = window.event;
	var tg = (e.target) ? e.target : e.srcElement;//tg为事件源对象，FF中为e.target，IE中为e.srcElement
	if(tg.className=="worm"){//事件源对象为小球
		M = tg.obj;
		xZ = M.X-xm;//xm为小球相对于鼠标的X位置（正常为负值）
		yZ = M.Y-ym;
		M.O.style.cursor="move";
	}
	return false;
}

document.onmouseup = function(){
	if(M!=false){
		M.O.style.cursor="pointer";
		M = false;
	}
}

CWorm = function(img,z) {//初始化单个小球
	this.WB = z*0.5*Math.max(img.width,img.height);
	this.X  = zz;
	zz += this.WB*2;
	this.Y  = (document.body.clientHeight/2)-this.WB;
	this.O = document.createElement("img");
	this.O.src = img.src;
	this.O.className = "worm";
	document.body.appendChild(this.O);
	this.O.obj = this;
}

function mainloop(){
	for(i=0;i<Nw;i++){
		with(b[i]){
			b[i].O.style.left = X;
			b[i].O.style.top  = Y;
		}
	}
	setTimeout("mainloop()",16);
}

onload = function() {
	for(i=0;i<Nw;i++){//Nw小球总数=19
		src=document.getElementById((i==0 || i==Nw-1)?"head":(i==Math.floor(Nw/2))?"mid":"chain");
		b[i] = new CWorm(src,0.95);//b  = new Object();
	}
	mainloop();
}
//-->
